const util = require("../../../utils/util.js");
const api = require("../../../config/api.js");

//获取应用实例
const app = getApp();
Page({
  data: {
    canIUseGetUserProfile: false,
    navUrl: "",
    code: "",
    showAvatarNicknamePopup: false,
    avatarUrl: "",
    nickname: ""
  },

  onLoad: function (options) {
    let that = this;
    if (wx.getUserProfile) {
      this.setData({
        canIUseGetUserProfile: true
      });
    }

    // 从 storage 中读取 navUrl
    const navUrl = wx.getStorageSync("navUrl");
    if (navUrl) {
      that.setData({
        navUrl: navUrl
      });
    }

    wx.login({
      success: function (res) {
        if (res.code) {
          that.setData({
            code: res.code
          });
        }
      }
    });
  },
  getUserProfile() {
    // 推荐使用wx.getUserProfile获取用户信息，开发者每次通过该接口获取用户个人信息均需用户确认
    // 开发者妥善保管用户快速填写的头像昵称，避免重复弹窗
    wx.getUserProfile({
      desc: "用于登录注册", // 声明获取用户个人信息后的用途，后续会展示在弹窗中，请谨慎填写
      success: (resp) => {
        //登录远程服务器
        this.loginByWeixin(resp);
      }
    });
  },
  bindGetUserInfo: function (e) {
    //登录远程服务器
    this.loginByWeixin(e.detail);
  },
  loginByWeixin: function (userInfo) {
    let that = this;
    if (that.data.code) {
      util
        .request(
          api.AuthLoginByWeixin,
          {
            code: that.data.code,
            userInfo: userInfo
          },
          "POST",
          "application/json"
        )
        .then((res) => {
          console.log("登录API响应:", res);

          // 使用标准化的响应处理
          const normalizedRes = util.normalizeApiResponse(res);
          console.log("标准化后的响应:", normalizedRes);

          if (normalizedRes.success) {
            //存储用户信息
            wx.setStorageSync("userInfo", normalizedRes.data.userInfo);
            wx.setStorageSync("token", normalizedRes.data.token);
            wx.setStorageSync("userId", normalizedRes.data.userId);

            console.log("登录成功");

            // 检查是否需要填写头像和昵称
            const userInfo = normalizedRes.data.userInfo;
            const needFillInfo = that.checkNeedFillAvatarNickname(userInfo);

            if (needFillInfo) {
              // 需要填写头像和昵称，显示弹窗
              that.setData({
                showAvatarNicknamePopup: true,
                avatarUrl: "",
                nickname:""
              });
            } else {
              // 不需要填写，直接跳转
              that.navigateAfterLogin();
            }
          } else {
            console.error("登录失败:", normalizedRes.message);
            wx.showModal({
              title: "登录失败",
              content: normalizedRes.message || "登录失败，请重试",
              showCancel: false,
              success: function () {
                // 登录失败时清除可能存在的错误数据
                wx.removeStorageSync("userInfo");
                wx.removeStorageSync("token");
                wx.removeStorageSync("userId");
              }
            });
          }
        })
        .catch((err) => {
          console.error("登录请求失败:", err);
          wx.showModal({
            title: "网络错误",
            content: "网络连接失败，请检查网络后重试",
            showCancel: false,
            success: function () {
              // 网络错误时清除可能存在的错误数据
              wx.removeStorageSync("userInfo");
              wx.removeStorageSync("token");
              wx.removeStorageSync("userId");
            }
          });
        });
    } else {
      console.error("微信登录code获取失败");
      wx.showModal({
        title: "登录失败",
        content: "获取微信登录凭证失败，请重试",
        showCancel: false
      });
    }
  },

  /**
   * 登录成功后的跳转处理
   */
  navigateAfterLogin: function () {
    // 登录成功后清除 navUrl，避免下次使用旧值
    wx.removeStorageSync("navUrl");

    // 仅跳转至上一个页面
    wx.navigateBack({
      success: function () {
        console.log("返回上一页成功");
      },
      fail: function (err) {
        console.log("返回上一页失败:", err);
        // 如果返回失败，默认跳转到首页
        wx.switchTab({
          url: "/pages/home/home",
          fail: function () {
            console.log("跳转到首页也失败");
          }
        });
      }
    });
  },
  onReady: function () {
    // 页面渲染完成
  },
  onShow: function () {
    // 页面显示
  },
  onHide: function () {
    // 页面隐藏
  },
  onUnload: function () {
    // 页面关闭
  },

  /**
   * 处理微信登录
   */
  handleWeChatLogin: function () {
    console.log("WeChat login clicked");
    // 这里可以添加微信登录逻辑
  },

  /**
   * 处理QQ登录
   */
  handleQQLogin: function () {
    console.log("QQ login clicked");
    // 这里可以添加QQ登录逻辑
  },

  /**
   * 处理微博登录
   */
  handleWeiboLogin: function () {
    console.log("Weibo login clicked");
    // 这里可以添加微博登录逻辑
  },

  /**
   * 检查是否需要填写头像和昵称
   * @param {Object} userInfo - 用户信息
   * @returns {Boolean} - 是否需要填写
   */
  checkNeedFillAvatarNickname: function (userInfo) {
    if (!userInfo) {
      return false;
    }
    // 检查头像是否为空
    const imageEmpty = !userInfo.avatar || userInfo.avatar.trim() === "";
    // 检查昵称是否为"微信用户"
    const nicknameIsDefault =
      userInfo.nickname === "微信用户" || userInfo.nickName === "微信用户";

    return imageEmpty || nicknameIsDefault;
  },

  /**
   * 选择头像
   */
  onChooseAvatar: function (e) {
    const { avatarUrl } = e.detail;
    this.setData({
      avatarUrl: avatarUrl
    });
  },

  /**
   * 输入昵称
   */
  onNicknameInput: function (e) {
    this.setData({
      nickname: e.detail.value
    });
  },

  /**
   * 关闭弹窗
   */
  onClosePopup: function () {
    // 强制填写，不能关闭
    wx.showToast({
      title: "请完善头像和昵称",
      icon: "none"
    });
  },

  /**
   * 提交头像和昵称
   */
  onSubmitAvatarNickname: function () {
    const that = this;
    const { avatarUrl, nickname } = this.data;

    // 验证
    if (!avatarUrl || avatarUrl.trim() === "") {
      wx.showToast({
        title: "请选择头像",
        icon: "none"
      });
      return;
    }

    if (!nickname || nickname.trim() === "") {
      wx.showToast({
        title: "请输入昵称",
        icon: "none"
      });
      return;
    }

    if (nickname === "微信用户") {
      wx.showToast({
        title: "请输入有效的昵称",
        icon: "none"
      });
      return;
    }

    // 显示上传提示
    wx.showLoading({
      title: "上传头像中...",
      mask: true
    });

    // 生成唯一的文件名
    const timestamp = Date.now();
    const randomStr = Math.random().toString(36).substring(2, 8);
    const fileExtension = avatarUrl.split(".").pop() || "jpg";
    const cloudPath = `hxq/avatar/${timestamp}-${randomStr}.${fileExtension}`;

    // 先上传头像到云存储
    wx.cloud.uploadFile({
      cloudPath: cloudPath,
      filePath: avatarUrl,
      config: {
        env: "hxq-9gjp5akqf782f714" // 云托管环境ID
      },
      success: function (uploadRes) {
        console.log("头像上传成功:", uploadRes);

        // 上传成功后，使用云存储文件ID更新用户信息
        const fileID = uploadRes.fileID;

        // 构建请求参数
        const requestData = {
          avatar: fileID, // 使用云存储文件ID
          nickname: nickname
        };

        // 如果用户信息中有 username，也一并提交
        const userInfo = wx.getStorageSync("userInfo");
        if (userInfo && userInfo.username) {
          requestData.username = userInfo.username;
        }

        console.log("提交头像和昵称:", requestData);

        // 调用更新用户信息接口
        util
          .request(api.UserUpdateInfo, requestData, "POST", "application/json")
          .then((res) => {
            wx.hideLoading();

            console.log("更新用户信息API响应:", res);

            // 使用标准化的响应处理
            const normalizedRes = util.normalizeApiResponse(res);
            console.log("标准化后的响应:", normalizedRes);

            if (normalizedRes.success) {
              // 更新本地存储的用户信息
              if (userInfo) {
                userInfo.image = fileID;
                userInfo.avatar = fileID;
                userInfo.nickname = nickname;
                userInfo.nickName = nickname; // 兼容不同字段名
                wx.setStorageSync("userInfo", userInfo);

                // 更新全局数据
                const app = getApp();
                if (app.globalData) {
                  app.globalData.userInfo = userInfo;
                }
              }

              wx.showToast({
                title: "提交成功",
                icon: "success"
              });

              // 关闭弹窗并跳转
              that.setData({
                showAvatarNicknamePopup: false
              });

              that.navigateAfterLogin();
            } else {
              console.error("更新用户信息失败:", normalizedRes.message);
              wx.showToast({
                title: normalizedRes.message || "提交失败，请重试",
                icon: "none",
                duration: 2000
              });
            }
          })
          .catch((err) => {
            wx.hideLoading();
            console.error("更新用户信息请求失败:", err);
            wx.showToast({
              title: "网络错误，请重试",
              icon: "none",
              duration: 2000
            });
          });
      },
      fail: function (uploadErr) {
        wx.hideLoading();
        console.error("头像上传失败:", uploadErr);
        wx.showToast({
          title: "头像上传失败，请重试",
          icon: "none",
          duration: 2000
        });
      }
    });
  }
});
